//javascript属于动态语言
//我么可以尝试调用任何对象的任意方法，而无需考虑它原本是否被设计为拥有该方法


//鸭子类型：如果它走起路来像鸭子，叫起来也是鸭子，那么它就是鸭子
//只关注对象的行为，而不关注对象本身 ,即 关注HAS-A  而不是 IS-A

//面向接口编程，而不是面向实现编程

var duck = {
    duckSinging:function () {
        console.log('嘎嘎嘎');
    }
};

var chicken = {
    duckSinging:function () {
        console.log('嘎嘎嘎');
    }
};

var chior = [];

var joinChior = function (animal) {
    if(animal && typeof animal.duckSinging === 'function'){
        chior.push(animal);
        console.log('恭喜加入合唱团');
        console.log('合唱团已有成员数量：'+chior.length);
    }
};

joinChior(duck);
joinChior(chicken);